 <#
.SYNOPSIS
    Creates a new cabinet .CAB file on disk.

.DESCRIPTION
    This cmdlet creates a new cabinet .CAB file using MAKECAB.EXE and adds
    all the files specified to the cabinet file itself.

.PARAMETER Name
    The output file name of the cabinet .CAB file, such as MyNewCabinet.cab.
    This should not be the entire file path, only the target file name.

.PARAMETER Fil
    One or more file references that are to be added to the cabinet .CAB file.
    FileInfo objects (as generated by Get-Item etc) or strings can be passed
    in via the pipeline to be added to the cabinet file.

.PARAMETER DestinationPath
    The output file path that the cabinet file will be saved in. It is also
    used for resolving any ambiguous file references, i.e. any file passed in
    via file name and not full path.

    If not specified the current working directory is used for the output file
    and attempting to resolve all ambiguous file references.

.PARAMETER NoClobber
    Will not overwrite of an existing file. By default, if a file exists in the
    specified path, New-CabinetFile overwrites the file without warning.

.EXAMPLE
    New-CabinetFile -Name MyCabinet.cab -File "File01.exe","File02.txt"
    
    This creates a new MyCabinet.cab file in the current directory and adds the File01.exe and File02.txt files to it, also from the current directory.
.EXAMPLE
    Get-ChildItem C:\CabFile\ | New-CabinetFile -Name MyCabinet.cab -DestinationPath C:\Users\UserA\Documents

    This creates a new C:\Users\UserA\Documents\MyCabinet.cab file and adds all files within the C:\CabFile\ directory into it.
#>
function New-CabinetFile {
    [CmdletBinding()]
    Param(
        [Parameter(HelpMessage="Target .CAB file name.", Position=0, Mandatory=$true, ValueFromPipelineByPropertyName=$true)]
        [ValidateNotNullOrEmpty()]
        [Alias("FilePath")]
        [string] $Name,

        [Parameter(HelpMessage="Content directory to add to the .CAB.", Position=1, Mandatory=$true, ValueFromPipeline=$false)]
        [ValidateNotNullOrEmpty()]
        [string[]] $ContentDirectory,

	[Parameter(HelpMessage="Default package directory path.", Position=2, ValueFromPipelineByPropertyName=$true)]
        [AllowNull()]
        [string[]] $DestinationDir,

        [Parameter(HelpMessage="Default intput/output path.", Position=3, ValueFromPipelineByPropertyName=$true)]
        [AllowNull()]
        [string[]] $DestinationPath,

        [Parameter(HelpMessage="Do not overwrite any existing .cab file.")]
        [Switch] $NoClobber
        )

    Begin { 
    
        ## If $DestinationPath is blank, use the current directory by default
        if ($DestinationPath -eq $null) { $DestinationPath = (Get-Location).Path; }
        Write-Verbose "New-CabinetFile using default path '$DestinationPath'.";
        Write-Verbose "Creating target cabinet file '$(Join-Path $DestinationPath $Name)'.";

        ## Test the -NoClobber switch
        if ($NoClobber) {
            ## If file already exists then throw a terminating error
            if (Test-Path -Path (Join-Path $DestinationPath $Name)) { throw "Output file '$(Join-Path $DestinationPath $Name)' already exists."; }
        }

        ## Cab files require a directive file, see 'http://msdn.microsoft.com/en-us/library/bb417343.aspx#dir_file_syntax' for more info
        $ddf = ";*** MakeCAB Directive file`r`n";
        $ddf += ";`r`n";
        $ddf += ".OPTION EXPLICIT`r`n";
        $ddf += ".Set CabinetNameTemplate=$Name`r`n";
        $ddf += ".Set DiskDirectory1=$DestinationPath`r`n";
        $ddf += ".Set MaxDiskSize=0`r`n";
	$ddf += ".Set MaxDiskFileCount=0`r`n";
	$ddf += ".Set FolderFileCountThreshold=0`r`n";
	$ddf += ".Set FolderSizeThreshold=0`r`n";
	$ddf += ".Set MaxCabinetSize=0`r`n";
	$ddf += ".Set CompressionType=MSZIP`r`n";
        $ddf += ".Set Cabinet=on`r`n";
        $ddf += ".Set Compress=on`r`n";
        ## Redirect the auto-generated Setup.rpt and Setup.inf files to the temp directory
        $ddf += ".Set RptFileName=$(Join-Path $ENV:TEMP "setup.rpt")`r`n";
        $ddf += ".Set InfFileName=$(Join-Path $ENV:TEMP "setup.inf")`r`n";
	$ddf += ".Set DestinationDir=$DestinationDir`r`n";

        ## If -Verbose, echo the directive file
        if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) {
            foreach ($ddfLine in $ddf -split [Environment]::NewLine) {
                Write-Verbose $ddfLine;
            }
        }
    }

    Process {
        $File = Get-ChildItem -Path $ContentDirectory
   
        ## Enumerate all the files add to the cabinet directive file
        foreach ($fileToAdd in $File) {
            Write-Verbose """$($fileToAdd.FullName)""";
            $ddf += """$($fileToAdd.FullName)""`r`n";
        }     
    }

    End {
    
        $ddfFile = Join-Path $DestinationPath "$Name.ddf";
        $ddf | Out-File $ddfFile -Encoding ascii | Out-Null;

        Write-Verbose "Launching 'C:\Windows\system32\makecab.exe /f ""$ddfFile""'.";
        $makeCab = Invoke-Expression "C:\Windows\system32\makecab.exe /F ""$ddfFile""";

        ## If Verbose, echo the MakeCab response/output
        if ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent) {
            ## Recreate the output as Verbose output
            foreach ($line in $makeCab -split [environment]::NewLine) {
                if ($line.Contains("ERROR:")) { throw $line; }
                else { Write-Verbose $line; }
            }
        }

        ## Delete the temporary .ddf file
        Write-Verbose "Deleting the directive file '$ddfFile'.";
        Remove-Item $ddfFile;

        ## Return the newly created .CAB FileInfo object to the pipeline
        Get-Item (Join-Path $DestinationPath $Name);
    }
} 


# SIG # Begin signature block
# MIIiHgYJKoZIhvcNAQcCoIIiDzCCIgsCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCRCQB92A0VZQ1H
# CrjdJBO3wNCibdvKCfaDDpqy7YVEv6CCEaEwggV+MIIEZqADAgECAhBn3vQ+8Xva
# 4k/1lAYG0sCEMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
# dmljZXMwHhcNMDQwMTAxMDAwMDAwWhcNMjgxMjMxMjM1OTU5WjCBhTELMAkGA1UE
# BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2Fs
# Zm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9E
# TyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
# A4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKP
# S38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6
# dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+
# 5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEn
# vGfDyi62a+pGx8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7
# tKuY2e7gUYPDCUZObT6Z+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKj
# WiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChW
# rBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl
# 8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe0
# 1a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFc
# OmpH4MN5WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwID
# AQABo4HyMIHvMB8GA1UdIwQYMBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1Ud
# DgQWBBS7r34CPfqm8TyEjq3uOJjs2TIy1DAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T
# AQH/BAUwAwEB/zARBgNVHSAECjAIMAYGBFUdIAAwQwYDVR0fBDwwOjA4oDagNIYy
# aHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5j
# cmwwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21v
# ZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggEBAH/yVjWwbZVKTnSvOuJvAYuH0zKX
# 7fhA0ndTEdfHFi7GneZIVr6Aqfi8eNLIYxeujO0WMfofGMkOx+5IeZ/Hybm8zIgV
# 42hh0Z8dS2GB11YEY8IIaSbw8OUv38AKK6kF9AJaaonXtIRClePr93YgXjXZwM0l
# CBNMcTiOh7AzhJGZHpHxrJ4/px1ggSw2QVSg4kYGC6wbx5k2jF6hC6Se2UJGJMXF
# W4GuraCg3J82uI3CHRX6iK2BEDkfRPArn90QVAwHNLE20RT9BwI9/3JVqyfWLIFB
# cSmNQfRQVxp+ZWCvy8Uodpius6hTdovmIVJr6iHQhA5JTohT2pIu5x0IZtcwggX1
# MIIE3aADAgECAhEAzhB+CIZCWs8DPSazYRw0CzANBgkqhkiG9w0BAQsFADCBkTEL
# MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
# BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxNzA1BgNVBAMT
# LkNPTU9ETyBSU0EgRXh0ZW5kZWQgVmFsaWRhdGlvbiBDb2RlIFNpZ25pbmcgQ0Ew
# HhcNMjAwOTAzMDAwMDAwWhcNMjEwOTAzMjM1OTU5WjCB+TEQMA4GA1UEBRMHMjk0
# NDU3MDETMBEGCysGAQQBgjc8AgEDEwJISzEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdh
# bml6YXRpb24xCzAJBgNVBAYTAkhLMRIwEAYDVQQHDAlIb25nIEtvbmcxGzAZBgNV
# BAkMEkt3dW4gVG9uZywgS293bG9vbjEtMCsGA1UECQwkUm0gODMgMy9GIFlhdSBM
# ZWUgQ3RyIDQ1IEhvaSBZdWVuIFJkMSEwHwYDVQQKDBhBcGVydHVyZSBTY2llbmNl
# IExpbWl0ZWQxITAfBgNVBAMMGEFwZXJ0dXJlIFNjaWVuY2UgTGltaXRlZDCCASIw
# DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANpH4ZmvIRFMLmWWKKkn187aPxTg
# aIU6w0i8KjrUGA+eowWGAJLCr5Bt3zU9Q3IlAIs+SrvCn/soOADIl90qAg7Z4X57
# GZUXtBm2LmtIRTFS1d8nTUL0GxRIJvfmv16rDGN/ZIHT7oRnZNqqvDNH0EJSSpPS
# jULt+JCaIaEPr3ugURNXtUKlAMnc/TVprsZ/uOCfGqoNSzPfBb/Xo+tubb3NgChJ
# 9vwY9NpuLyNwhTDnA4XD9HYDVWrpXSMuyMUw2tH/NevBD0uycdSeiEOL+QYafR+t
# 8INUjRkAblsNVBkwv/SrhTFSKYuTaH91QomE118/W/XJmP6srrEKLM0Im+ECAwEA
# AaOCAdwwggHYMB8GA1UdIwQYMBaAFN+P8yAM6cqmBNhbWDcqPatG3INJMB0GA1Ud
# DgQWBBRsjK5AOHjIz7lAXUG7aRZD49Ns6jAOBgNVHQ8BAf8EBAMCB4AwDAYDVR0T
# AQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDAzARBglghkgBhvhCAQEEBAMCBBAw
# SQYDVR0gBEIwQDA1BgwrBgEEAbIxAQIBBgEwJTAjBggrBgEFBQcCARYXaHR0cHM6
# Ly9zZWN0aWdvLmNvbS9DUFMwBwYFZ4EMAQMwVQYDVR0fBE4wTDBKoEigRoZEaHR0
# cDovL2NybC5jb21vZG9jYS5jb20vQ09NT0RPUlNBRXh0ZW5kZWRWYWxpZGF0aW9u
# Q29kZVNpZ25pbmdDQS5jcmwwgYYGCCsGAQUFBwEBBHoweDBQBggrBgEFBQcwAoZE
# aHR0cDovL2NydC5jb21vZG9jYS5jb20vQ09NT0RPUlNBRXh0ZW5kZWRWYWxpZGF0
# aW9uQ29kZVNpZ25pbmdDQS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNv
# bW9kb2NhLmNvbTAlBgNVHREEHjAcoBoGCCsGAQUFBwgDoA4wDAwKSEstMjk0NDU3
# MDANBgkqhkiG9w0BAQsFAAOCAQEAM5EqUWtJItHkyrMhjQpQ6UHr/jxpsCQoNqaE
# 96LCP0mJxEyyS/00x+FiGwGKXZBUdS+JP77A2ndP6pcIS+sNlkoLag3KshBCzkHN
# 8uLgPsHRRMExTNw5lNVHCURfQZeh94bNGPXpX8hpqrOL2rIjtQw01fo9qmsXymTU
# LCFEh2hdGDM2SLG9rZ7qVgXa+Wd4IqLJ7Xk850guyf1eeTlza3WzZAzrqxWWLq3u
# k5fHO2u34ggwBVjBpDbR7Ko7IMR/HrI/1GOVTY4OHZ3eP/jm5vpSvx3ThLegkFt0
# R6Jw0kAvcwTqsw7DrJCJRnfX8TN9ojsP54vMvwWsXNoh24Fh7jCCBiIwggQKoAMC
# AQICEG3UcusCrgQG492EP1/hReEwDQYJKoZIhvcNAQEMBQAwgYUxCzAJBgNVBAYT
# AkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZv
# cmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSswKQYDVQQDEyJDT01PRE8g
# UlNBIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE0MTIwMzAwMDAwMFoXDTI5
# MTIwMjIzNTk1OVowgZExCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h
# bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBM
# aW1pdGVkMTcwNQYDVQQDEy5DT01PRE8gUlNBIEV4dGVuZGVkIFZhbGlkYXRpb24g
# Q29kZSBTaWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
# iv29Q/A9yFUf81mK8Fq03JPRZBVKioSlLcsm+OBFOKO5AcVPEwhZ0DFUys2QYaM+
# LPJNFVzU7sNqIpdI0QZDNAmZyc8wxJ9E/Vac7szng7mBzcjaCxwSSP9vouzEdcsJ
# cM9R5buLn6q9eAZ9ldZhgfbaU8esnbMAuh7UvkBiCZmDPUXdTWWVBMz8+sdbeuIu
# DD1VNVc1SImJ8rlWpUtQGxzemJC98y7ciKnxdZuoPqIF2UG173etF8Ba9aPbTZ/R
# xLF7g7XuEJQrLnKuvu+VKZxSYsUsbSL3fUR6EF9jk2lN2X2ymrFOtVm//4X7vazs
# 4Sum4yws6Nlu219NF3jLUwIDAQABo4IBfjCCAXowHwYDVR0jBBgwFoAUu69+Aj36
# pvE8hI6t7jiY7NkyMtQwHQYDVR0OBBYEFN+P8yAM6cqmBNhbWDcqPatG3INJMA4G
# A1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/AgEAMBMGA1UdJQQMMAoGCCsG
# AQUFBwMDMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwczov
# L3NlY3VyZS5jb21vZG8uY29tL0NQUzBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8v
# Y3JsLmNvbW9kb2NhLmNvbS9DT01PRE9SU0FDZXJ0aWZpY2F0aW9uQXV0aG9yaXR5
# LmNybDBxBggrBgEFBQcBAQRlMGMwOwYIKwYBBQUHMAKGL2h0dHA6Ly9jcnQuY29t
# b2RvY2EuY29tL0NPTU9ET1JTQUFkZFRydXN0Q0EuY3J0MCQGCCsGAQUFBzABhhho
# dHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQEMBQADggIBAGZO7LcW
# d28R6Btdak7Z8otssVYoQIvAMcSZSCM9+A7ogJfvbSALHxPEhvsXNBXhjlT3wrgA
# cxXgKNnauvqCVML367/DNtAwn+WhHJTf73zo9ix4oqzPJmoVoRUx1jE0mL1TT8SE
# g6PEllw92P7W+VT/Z5Nt+D4rayyiCHxWSIEyGLJurJDB2+TeOYuG5ccYQFmk35ZH
# urJ/sfhXD4WAdDgOOlhiHv5S4+auUwmG/o+b21ZWzAewicEE8VMLbG937LIf7PZb
# QENgDxurGFS0EASO+A7py4OxevI0TmpUTOmDKumwMCUczmKODuuF5in+sUrj8q48
# kfVMob7IFw5cu0JN4xqKks0+IH7d6XWx6h90XJ5UwpQ3smHdBxZZf5aAFuCZtdJu
# sMkjBhWs0SP0M4vOdfDBhtP/4S76kE/+Rvm720+7t/7RDSsE8dLRlYUsii64hVby
# w4RSoekzsetQyKGwn+PDizqHnudV09NtNBcwDWgiC9W57XM1csPtpzfN40OuRc00
# vyjKh2LtQ6Sv+ssxyyFYYUZetsZ6ph5TKqj4XFEfOloQDyjA5HSLdMYEqvhLJigK
# MonbnSpgcWrDlk4WuWO/YZVnjEsuu7BOg+lNMeWOJyL1PCZ7RJHT1Frw03z0OL4U
# mpkOi7Fb6uSLDxGdd0KCHFw61NqriC+NVzBUMYIP0zCCD88CAQEwgacwgZExCzAJ
# BgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcT
# B1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMTcwNQYDVQQDEy5D
# T01PRE8gUlNBIEV4dGVuZGVkIFZhbGlkYXRpb24gQ29kZSBTaWduaW5nIENBAhEA
# zhB+CIZCWs8DPSazYRw0CzANBglghkgBZQMEAgEFAKB8MBAGCisGAQQBgjcCAQwx
# AjAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM
# BgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCAjxebzHD5YPMAKQpqHpwx+76aQ
# a0jmJhb7cbUjUTbPdTANBgkqhkiG9w0BAQEFAASCAQCCAt2hgKDtfM+0OHweiT0s
# JQ92TiwNq91vsGFtzYPbPfeJrfZSp6hDYqgeYdMOSqKLnQghUlDu5Hg+cL3INDjo
# Nes0CXldNlIBv7cVBq/euacKxe4ihKomILBSPYKCS9dCsqBvGBIblfuXJ3Kz0S9Z
# IlXiNvRwhz4GNCPeJfYgNxGabG/jZkjGfjJkWIKHmxuErwFWZnASQ9s2F1/tDvBE
# T2XHjeikoNPA85X73Ivg9E6CzJe02jsZAoQqZyDCqIelxAiIHRHqqV20T868ypln
# HHLr8nbxj9vcCVRAsZMow2bEhAoIpRLkNqIeghMfi8SEIoug3bCx4bqAwLZAf+6Q
# oYINfjCCDXoGCisGAQQBgjcDAwExgg1qMIINZgYJKoZIhvcNAQcCoIINVzCCDVMC
# AQMxDzANBglghkgBZQMEAgEFADB4BgsqhkiG9w0BCRABBKBpBGcwZQIBAQYJYIZI
# AYb9bAcBMDEwDQYJYIZIAWUDBAIBBQAEIIUw89LmZyq9yuRiOCvCxSfW/yKPr9iv
# djHHx7eqHD0YAhEAxV6DgaDoWwVUZz4s7WsA7xgPMjAyMTA3MTcyMDEyMzhaoIIK
# NzCCBP4wggPmoAMCAQICEA1CSuC+Ooj/YEAhzhQA8N0wDQYJKoZIhvcNAQELBQAw
# cjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQ
# d3d3LmRpZ2ljZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVk
# IElEIFRpbWVzdGFtcGluZyBDQTAeFw0yMTAxMDEwMDAwMDBaFw0zMTAxMDYwMDAw
# MDBaMEgxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4G
# A1UEAxMXRGlnaUNlcnQgVGltZXN0YW1wIDIwMjEwggEiMA0GCSqGSIb3DQEBAQUA
# A4IBDwAwggEKAoIBAQDC5mGEZ8WK9Q0IpEXKY2tR1zoRQr0KdXVNlLQMULUmEP4d
# yG+RawyW5xpcSO9E5b+bYc0VkWJauP9nC5xj/TZqgfop+N0rcIXeAhjzeG28ffnH
# bQk9vmp2h+mKvfiEXR52yeTGdnY6U9HR01o2j8aj4S8bOrdh1nPsTm0zinxdRS1L
# sVDmQTo3VobckyON91Al6GTm3dOPL1e1hyDrDo4s1SPa9E14RuMDgzEpSlwMMYpK
# jIjF9zBa+RSvFV9sQ0kJ/SYjU/aNY+gaq1uxHTDCm2mCtNv8VlS8H6GHq756Wwog
# L0sJyZWnjbL61mOLTqVyHO6fegFz+BnW/g1JhL0BAgMBAAGjggG4MIIBtDAOBgNV
# HQ8BAf8EBAMCB4AwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcD
# CDBBBgNVHSAEOjA4MDYGCWCGSAGG/WwHATApMCcGCCsGAQUFBwIBFhtodHRwOi8v
# d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHwYDVR0jBBgwFoAU9LbhIB3+Ka7S5GGlsqIl
# ssgXNW4wHQYDVR0OBBYEFDZEho6kurBmvrwoLR1ENt3janq8MHEGA1UdHwRqMGgw
# MqAwoC6GLGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtdHMu
# Y3JsMDKgMKAuhixodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVk
# LXRzLmNybDCBhQYIKwYBBQUHAQEEeTB3MCQGCCsGAQUFBzABhhhodHRwOi8vb2Nz
# cC5kaWdpY2VydC5jb20wTwYIKwYBBQUHMAKGQ2h0dHA6Ly9jYWNlcnRzLmRpZ2lj
# ZXJ0LmNvbS9EaWdpQ2VydFNIQTJBc3N1cmVkSURUaW1lc3RhbXBpbmdDQS5jcnQw
# DQYJKoZIhvcNAQELBQADggEBAEgc3LXpmiO85xrnIA6OZ0b9QnJRdAojR6OrktIl
# xHBZvhSg5SeBpU0UFRkHefDRBMOG2Tu9/kQCZk3taaQP9rhwz2Lo9VFKeHk2eie3
# 8+dSn5On7UOee+e03UEiifuHokYDTvz0/rdkd2NfI1Jpg4L6GlPtkMyNoRdzDfTz
# ZTlwS/Oc1np72gy8PTLQG8v1Yfx1CAB2vIEO+MDhXM/EEXLnG2RJ2CKadRVC9S0y
# OIHa9GCiurRS+1zgYSQlT7LfySmoc0NR2r1j1h9bm/cuG08THfdKDXF+l7f0P4Tr
# weOjSaH6zqe/Vs+6WXZhiV9+p7SOZ3j5NpjhyyjaW4emii8wggUxMIIEGaADAgEC
# AhAKoSXW1jIbfkHkBdo2l8IVMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVT
# MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
# b20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xNjAx
# MDcxMjAwMDBaFw0zMTAxMDcxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNV
# BAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0EwggEi
# MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC90DLuS82Pf92puoKZxTlUKFe2
# I0rEDgdFM1EQfdD5fU1ofue2oPSNs4jkl79jIZCYvxO8V9PD4X4I1moUADj3Lh47
# 7sym9jJZ/l9lP+Cb6+NGRwYaVX4LJ37AovWg4N4iPw7/fpX786O6Ij4YrBHk8JkD
# bTuFfAnT7l3ImgtU46gJcWvgzyIQD3XPcXJOCq3fQDpct1HhoXkUxk0kIzBdvOw8
# YGqsLwfM/fDqR9mIUF79Zm5WYScpiYRR5oLnRlD9lCosp+R1PrqYD4R/nzEU1q3V
# 8mTLex4F0IQZchfxFwbvPc3WTe8GQv2iUypPhR3EHTyvz9qsEPXdrKzpVv+TAgMB
# AAGjggHOMIIByjAdBgNVHQ4EFgQU9LbhIB3+Ka7S5GGlsqIlssgXNW4wHwYDVR0j
# BBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8wEgYDVR0TAQH/BAgwBgEB/wIBADAO
# BgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgweQYIKwYBBQUHAQEE
# bTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYB
# BQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3Vy
# ZWRJRFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRp
# Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0
# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5j
# cmwwUAYDVR0gBEkwRzA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBz
# Oi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEB
# CwUAA4IBAQBxlRLpUYdWac3v3dp8qmN6s3jPBjdAhO9LhL/KzwMC/cWnww4gQiyv
# d/MrHwwhWiq3BTQdaq6Z+CeiZr8JqmDfdqQ6kw/4stHYfBli6F6CJR7Euhx7LCHi
# 1lssFDVDBGiy23UC4HLHmNY8ZOUfSBAYX4k4YU1iRiSHY4yRUiyvKYnleB/WCxSl
# gNcSR3CzddWThZN+tpJn+1Nhiaj1a5bA9FhpDXzIAbG5KHW3mWOFIoxhynmUfln8
# jA/jb7UBJrZspe6HUSHkWGCbugwtK22ixH67xCUrRwIIfEmuE7bhfEJCKMYYVs9B
# NLZmXbZ0e/VWMyIvIjayS6JKldj1po5SMYIChjCCAoICAQEwgYYwcjELMAkGA1UE
# BhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2lj
# ZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIFRpbWVz
# dGFtcGluZyBDQQIQDUJK4L46iP9gQCHOFADw3TANBglghkgBZQMEAgEFAKCB0TAa
# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIxMDcx
# NzIwMTIzOFowKwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQU4deCqOGRvu9ryhaRtaq0
# lKYkm/MwLwYJKoZIhvcNAQkEMSIEIBi4VIMj/rgKAw2B5w6wOyyLTcgf6+XdUArV
# h8qRoJ0dMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEILMQkAa8CtmDB5FXKeBEA0Fc
# g+MpK2FPJpZMjTVx7PWpMA0GCSqGSIb3DQEBAQUABIIBALhqaRM/3fVZszOSaYxc
# 96Uswcj3YX2AyqwvZRoSY0ut7bCCc61FVMA6s0//Xgy3dGIjD/oqPH6TjYOO60Re
# FzeEusomgXtzLW7dIkbLJ+k3KtkyYcu18uGlctTjI13xdP6icr22zGKzrC8YCkLm
# GWu8gr4cBVNI/oVEWS4MWW3wvmNZNwh8gfZyr8gmLfSygSyxWtmjFyiYiYiTU/Lo
# gBe+oQcWdRVkkCcqC60ON8a9Ew16qIIV1myCW3SjHRSHqKtZAmWtQDAU7eR8vOmD
# m7aiwyEmYFovhQakstiMySWnQ5vSu3kHJG+pNmSJ6x9h9vDnj1GeLPUr9+KjqYaN
# Y24=
# SIG # End signature block
